// 实现UserService中的方法
package com.logindemo.springbootlogindemo.service.serviceImpl;

import com.logindemo.springbootlogindemo.domain.User;
import com.logindemo.springbootlogindemo.repository.UserDao;
import com.logindemo.springbootlogindemo.service.UserService;
import com.logindemo.springbootlogindemo.utils.Result;
import jakarta.annotation.Resource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {
    // 因为要用到UserDao中的方法，所以先通过@Resource注解帮助我们实例化UserDao对象
    @Resource
    private UserDao userDao;

    // 登录业务逻辑代码---默认账号登录:
    @Override
    public User loginService(String uname, String password) {
        // 如果账号密码都对则返回登录的用户对象，若有一个错误则返回null
        User user = userDao.findByUnameAndPassword(uname, password);
        // 重要信息置空
        if(user != null){
            user.setPassword("");
        }
        return user;
    }

    // 登录业务逻辑代码----新增手机号登录:
    @Override
    public User loginByPhone(String phonenumber, String code) {
        // 这里暂时不校验验证码，直接根据手机号查找用户
        User user = userDao.findByPhonenumber(phonenumber);
        if (user != null) {
            user.setPassword(""); // 清空密码
            return user;
        }
        return null;
    }

    // 登录业务逻辑代码----新增邮箱登录:
    @Override
    public User loginByEmail(String email, String emailcode) {
        // 这里暂时不校验验证码，直接根据邮箱查找用户
        User user = userDao.findByEmail(email);
        if (user != null) {
            user.setPassword(""); // 清空密码
            return user;
        }
        return null;
    }


    // 注册业务逻辑代码:
    @Override
    public Result<User> registService(User user) {
        // 校验用户名是否已存在
        if(userDao.findByUname(user.getUname())!=null){
            // 无法注册
            return Result.error("400", "用户名已存在");
        }

        // 校验手机号是否已存在
        if (user.getPhonenumber() != null && userDao.findByPhonenumber(user.getPhonenumber()) != null) {
            return Result.error("400","手机号已注册");
        }

        // 校验邮箱是否已存在
        if (user.getEmail() != null && userDao.findByEmail(user.getEmail()) != null) {
//            throw new RuntimeException("邮箱已注册");
//            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("邮箱已注册");
            return Result.error("400", "邮箱已注册");
        }

        // 保存用户信息
        try {
            //返回创建好的用户对象(带uid)
            User newUser = userDao.save(user);
            newUser.setPassword(""); // 清空密码
            return Result.success(newUser, "注册成功");
        } catch (Exception e) {
            throw new RuntimeException("注册失败：" + e.getMessage());
        }
    }
}
